package cn.tedu.review;
/**
 * @Author 金帮嘉诚
 * @Date 2021-06-15 周二 20:57
 */
/*本类用于复习，面向对象2*/

/**
 知识点：
 构造方法:有参无参，默认存在super（）；
 继承：extends，重写（两同两小一大），新方法
 代码块：静态、构造、局部
 this：1.成员变量和局部变量同名时调用成员变量2.调用自身另外的构造方法，注意不能互相调用
 super1.变量与父类成员变量同名时调用父类成员变量2.子类调用父类构造方法，注意不能和this（）同时调用
 */
public class ReviewOOP2 {
    public static void main(String[] args) {
        System.out.println("*******************");
        new Cat();
        System.out.println("*******************");

        Cat c=new Cat();
        System.out.println("*******************");

        DD d=new DD();
        d.eat();
        System.out.println("d.price = " + d.price);
//        d.play();不可使用
        //输出：
//                *******************
//        Cat Static Block
//        Cat Constructor Block
//        Cat Non-parameter Constructor
//                *******************
//        Cat Constructor Block
//        Cat Non-parameter Constructor
//                *******************
//        Cat Constructor Block
//        Cat Non-parameter Constructor
//        super.name = 无参构造调用有参构造
//        DD eat~~~~~~~~~
//                d.price = 1.2
    }
}
class Cat{
    String name;
    int id;
    double price;
    {
        System.out.println("Cat Constructor Block");
    }
    static{
        System.out.println("Cat Static Block");
    }
    public void eat(){
        {
            System.out.println("Cat Area Block");
        }
        System.out.println("Cat eat~~~~~~~~~~~~~");
    }
    public Cat(String name, int id, double price) {
        this.name = name;
        this.id = id;
        this.price = price;
    }

    public Cat() {
        this("无参构造调用有参构造",11,1.2);
        System.out.println("Cat Non-parameter Constructor");

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}
class DD extends Cat{
    /*重写的原则：两同两小一大*/
    String name;

    public DD() {
        /*super作用2：调用父类构造方法*/
        /*此句默认存在，创建子类对象时，会先调用父类的构造函数*/
        super();
//        super("",1,1);
    }
    @Override//重写
    public void eat(){
        /*super作用1：父子 类变量重名时，用super.调用父类对象*/
        System.out.println("super.name = " + super.name);
        System.out.println("DD eat~~~~~~~~~");
    }
    /*子类特有*/
    public void jump(){
        System.out.println("DD Jump~~~~~~~");
    }
}